package com.swordget.dao;

import com.alibaba.fastjson.JSONArray;
import com.swordget.entity.ColumnDesign;
import com.swordget.entity.po.CheckLogPo;
import com.swordget.entity.po.DataQueryPo;

import java.io.File;
import java.util.List;
import java.util.Map;

/**
 * @Author: David
 * @Date: Created in 16:38 2020/4/8
 * @Description: ${DESCRIPTION}
 * @Modified By:
 * @Version: ${VERSION}
 */
public interface DataHandlerDao {

    /**
     * 查询表数据,查询全部
     *
     * @param tableName 表名
     * @param columns   表字段
     * @param types     表字段类型集合
     * @return
     */
    List<Map<String, Object>> query(String tableName, List<String> columns, List<String> types);

    /**
     * 查询表数据，分页实现
     *
     * @param rows      查询的条数
     * @param page      查询的页数
     * @param params    查询参数
     * @param tableName 表名
     * @param columns   字段集合
     * @param types     字段类型集合
     * @return
     */
    DataQueryPo query(int rows, int page, JSONArray params, String tableName, List<String> columns,
                      List<String> types, List<ColumnDesign> columnDesigns, String dataSourceId);


    List<List<String>> queryByListByStatus(int rows, int page, JSONArray queryParam, String tableName,
                                           List<String> columns, List<String> types, List<ColumnDesign> columnDesigns,
                                           String[] serials, String dataSourceId);

    /**
     * 执行插入
     *
     * @param tableName 表名
     * @param columns   字段
     * @param values    值
     * @return
     */
    boolean insert(String tableName, String columns, String values, String dataSourceId);

    /**
     * 数据插入
     *
     * @param tableName 表名
     * @param columns   字段集合
     * @param datas     数据
     * @return
     */
    boolean insert(String tableName, List<String> columns, String[][] datas);

    /**
     * 修改
     *
     * @param tableName 表名
     * @param names     字段集合
     * @param values    值集合
     * @return
     */
    boolean modify(String tableName, List<String> names, List<String> values, String keyValue, String dataSourceId);

    /**
     * 删除
     *
     * @param tableName 表名
     * @param params    参数集合
     * @return
     */
    boolean remove(String tableName, List<String> params);

    /**
     * 删除
     *
     * @param tableName
     * @param params
     * @return
     */
    boolean remove(String tableName, JSONArray params, String dataSourceId);

    /**
     * 获取查询条件下的数量
     *
     * @param tableName   表名
     * @param queryParams 查询参数
     * @return
     */
    int getTotal(String tableName, JSONArray queryParams);

    int getCount(String tableName, String name, String value);

    /**
     * 获取主键序列
     *
     * @param tableName 表名
     * @param name      字段名
     * @param value     字段值
     * @return
     */
    String getSerialno(String tableName, String name, String value);


    List<List<String>> queryByList(int rows, int page, JSONArray queryParam, String tableName, List<String> columns, List<String> types);

    /**
     * 通过loaddata 插入数据
     *
     * @param loadData
     * @param tableName
     * @param columns
     * @return
     */
    int insert(File loadData, String tableName, List<String> columns) throws Exception;

    /**
     * 复制临时表数据到正式表
     *
     * @param tableName    正式表名
     * @param tableNameTmp 临时表名
     * @param columns
     * @param importId     导入id
     */
    boolean copyData(String tableName, String tableNameTmp, List<String> columns, String importId);

    /**
     * 根据IMPORTID 删除数据
     *
     * @param tableNameTmp 表名
     * @param importId     id
     * @return
     */
    boolean removeByImportId(String tableNameTmp, String importId);

    /**
     * 新增校验日志信息
     *
     * @return
     */
    boolean addCheckLog(CheckLogPo checkLogPo);

    /**
     * 申请删除
     *
     * @param handleName 操作名
     * @param tableName  表名
     * @param idS        id 集合
     * @param handleDate 操作时间
     * @param handleTime 操作时间
     * @param handleUser 操作用户
     * @param status     状态
     * @return
     */
    boolean applyRemove(String tableName, String idS, String handleDate, String handleTime, String handleUser, String handleName, String status);

    /**
     * 数据修改
     *
     * @param tableName    表名
     * @param searchParams 搜索参数
     * @param handleDate   操作日期
     * @param handleTime   操作时间
     * @param handleName   操作用户
     * @return
     */
    boolean dataModify(String tableName, JSONArray searchParams, String handleDate, String handleTime, String handleUser, String handleName, String status);

    /**
     * 数据修改
     *
     * @param tableName    表名
     * @param searchParams 搜索参数
     * @param handleDate   操作日期
     * @param handleTime   操作时间
     * @param handleName   操作用户
     * @return
     */
    boolean dataModify(String tableName, JSONArray searchParams, String handleDate, String handleTime, String handleUser, String handleName, String notPassMark, String status);

    /**
     * 审核通过
     *
     * @param tableName
     * @param searchParams
     * @param handleDate
     * @param handleTime
     * @return
     */
    boolean pass(String tableName, JSONArray searchParams, String handleDate, String handleTime, String handleUser);

    /**
     * 数据修改
     *
     * @param tableName    表名
     * @param searchParams 搜索参数
     * @param handleDate   操作日期
     * @param handleTime   操作时间
     * @param handleName   操作用户
     * @return
     */
    boolean applyDataModify(String tableName, JSONArray searchParams, String handleDate, String handleTime, String handleUser, String handleName, String status);

    /**
     * 数据修改
     *
     * @param tableName    表名
     * @param searchParams 搜索参数
     * @param handleDate   操作日期
     * @param handleTime   操作时间
     * @param handleName   操作用户
     * @return
     */
    boolean passDataModify(String tableName, JSONArray searchParams, String handleDate, String handleTime, String handleUser, String handleName, String status);

    Integer checkNullOrContainsHanleName(String tableName, JSONArray searchParams);

    Integer checkNullOrNotContainsHanleName(String tableName, JSONArray searchParams);

    int getTotal(String tableName, JSONArray queryParams, String[] serials, String dataSourceId);

    /**
     * 数据修改
     *
     * @param tableName    表名
     * @param searchParams 搜索参数
     * @param handleDate   操作日期
     * @param handleTime   操作时间
     * @param handleName   操作用户
     * @return
     */
    boolean agreeDataModify(String tableName, JSONArray searchParams, String handleDate, String handleTime, String handleUser, String handleName, String status, String lastStatus);

    /**
     * 审核通过
     *
     * @param tableName
     * @param searchParams
     * @param handleDate
     * @param handleTime
     * @return
     */
    boolean pass(String tableName, JSONArray searchParams, String handleDate, String handleTime, String handleUser, String status, String lastStatus, String reason);


}
